#include "Cliente.h"


Cliente :: Cliente ( char* archivo,char letra, string nombre ) {
	this->cola = new Cola<mensaje> ( archivo,letra );
	this->setNombre(nombre);
	this->setPid(getpid());
}

Cliente :: ~Cliente() {
	//delete this->cola;
}

mensaje Cliente :: enviarPeticion () {
	mensaje respuesta;

	this->peticion.pid = this->pid;

	if(this->peticion.tipoMensaje != 'D'){
		this->peticion.idSala = this->getIdSala();
	}

	this->peticion.mtype = PETICION;
	strcpy(this->peticion.nombreEmisor,this->nombre.c_str());

	this->cola->escribir ( this->peticion );

	if (this->peticion.tipoMensaje != 'C' && this->peticion.tipoMensaje != 'S') {
		this->cola->leer (this->pid,&respuesta );
	}

	return respuesta;
}

mensaje Cliente :: pedirSalas(){
	this->peticion.tipoMensaje = 'P';
	return this->enviarPeticion();
}

int Cliente :: crearSala(string nombre){
	this->peticion.tipoMensaje = 'A';
	strcpy(this->peticion.texto,nombre.c_str());
	mensaje respuesta = this->enviarPeticion();
	return respuesta.idSala;
}

int Cliente :: getIdSala(){
    return idSala;
}

void Cliente :: setIdSala(int idSala){
    this->idSala = idSala;
}

string Cliente :: getNombre() {
    return nombre;
}

int Cliente :: getPid() {
    return pid;
}

void Cliente :: setNombre(string nombre) {
    this->nombre = nombre;
}

void Cliente :: setPid(int pid) {
    this->pid = pid;
}

mensaje Cliente :: unirseASala(int idSala){
	this->peticion.tipoMensaje = 'U';
	this->peticion.idSala = idSala;
	this->setIdSala(idSala);
	return this->enviarPeticion();
}

void Cliente :: chatear(string texto){
	this->peticion.tipoMensaje = 'C';
	strcpy(this->peticion.texto,texto.c_str());
	this->enviarPeticion();
}

void Cliente :: salir(){
	this->peticion.tipoMensaje = 'S';
	this->enviarPeticion();
}

mensaje Cliente::recibirMensaje(){
	mensaje mensajeRecibido;
	this->cola->leer (this->pid,&mensajeRecibido );
	return mensajeRecibido;
}

mensaje Cliente::pedirUsuariosDeSala(int idSala){
	this->peticion.tipoMensaje = 'D';
	this->peticion.idSala = idSala;
	return this->enviarPeticion();
}
